//
//  HMHomeViewModel.swift
//  HMVVeibo23
//
//  Created by apple on 17/2/4.
//  Copyright © 2017年 apple. All rights reserved.
//

import UIKit
import SDWebImage
/*
    - 作用:
        - 帮助HomeVc 请求数据
        - 给HomeVc 提供数据
 */
class HMHomeViewModel: NSObject {
    
    // 保存首页数据的数组
    lazy var dataArray: [HMStatusViewModel] = [HMStatusViewModel]()

}

// MARK: - 请求微博首页数据
extension HMHomeViewModel{
    /* 
      isFinish - ture  false
     
     true  外界刷新ui
     false 告知用户请求失败
    isPullUp 如果他等于 true 代表是 上拉加载更多 反之 是下拉刷新
     */
    func getHomeData(isPullUp:Bool, isFinish:@escaping (Bool,Int)->()){
        
        // 定义sinceId 和maxId 默认为0
        var sinceId: Int64 = 0
        var maxId: Int64 = 0
        
        // 判断是否是上拉加载更多
        if isPullUp {
            maxId = dataArray.last?.homeModel?.id ?? 0
            // 按照微博接口的需求
            if maxId > 0 {
                maxId = maxId - 1
            }
        }else {
            // 下拉刷新
            sinceId = dataArray.first?.homeModel?.id ?? 0
        }
        
        // 通过首页的数据处理层HMHomeDAL 来判断本地是否有缓存数据
        
        HMHomeDAL.checkCache(sinceId: sinceId, maxId: maxId) { (response) in
            
            // 判断是否为nil
            guard let res = response else{
                // 执行闭包
                isFinish(false,0)
                return
            }
            
            // OC中获取类型的class -> [Person class]
            // Swift获取类型的class -> Person.self
            // 得到的模型数组
            let statusArray = NSArray.yy_modelArray(with: HMHomeModel.self, json: res)  as! [HMHomeModel]
            // 创建一个临时可以可变的数组-> [HMStatusViewModel]
            var tempArray:[HMStatusViewModel] = [HMStatusViewModel]()
            // 创建调度组
            let group = DispatchGroup()
            
            // 遍历statusArray 创建statuViewModel 然后对齐身上的homeModel进行赋值 然后 保存到临时数组中
            for homeModel in statusArray{
                
                
                // 判断原创微博的pic_urls.count 是否等于1 如果等于1 下载图片
                if homeModel.pic_urls?.count == 1 {
                    // 进入
                    group.enter()
                    // 使用sdwebImage下载
                    SDWebImageManager.shared().downloadImage(with: URL(string: homeModel.pic_urls?.first?.thumbnail_pic ?? ""), options: [], progress: nil, completed: { (image, error, _, _, _) in
                        print("原创微博单张图片下载完成")
                        // 出去
                        group.leave()
                    })
                }
                
                // 判断转发微博的pic_urls.count 是否等于1 如果等于1 下载图片
                if homeModel.retweeted_status?.pic_urls?.count == 1 {
                    // 进入
                    group.enter()
                    // 使用sdwebImage下载
                    SDWebImageManager.shared().downloadImage(with: URL(string: homeModel.retweeted_status?.pic_urls?.first?.thumbnail_pic ?? ""), options: [], progress: nil, completed: { (image, error, _, _, _) in
                        print("转发微博单张图片下载完成")
                        // 出去
                        group.leave()
                    })
                }
                let statusViewModel = HMStatusViewModel()
                // 对属性赋值
                statusViewModel.homeModel = homeModel
                // 添加到临时数组中
                tempArray.append(statusViewModel)
            }
            
            /*
             - 微博数据显示的业务逻辑
             -如果是下拉刷新 得到新的数据 放到原有数组的前面
             -如果是上拉加载更过 得到的数据 放到原有数组的后面
             */
            // 赋值
            // 如果是上拉加载更多
            if isPullUp {
                self.dataArray = self.dataArray + tempArray
            }else {
                // 下拉刷新
                self.dataArray = tempArray + self.dataArray
            }
            
            // 监听sdwebimage 是否下载完成
            group.notify(queue: DispatchQueue.main, execute: {
                print("所有微博单张图片下载完成")
                // 执行闭包
                isFinish(true, tempArray.count)
            })
            
        }
        
      }
}

extension HMHomeViewModel {
    func test(){
        /*
         // 请求数据
         HMNetworkTools.shared.loadHomeData(since_id:sinceId, max_id:maxId,success: { (response) in
         // 判断response 是否为nil 而且是否可以转成字典
         guard let resDict = response as? [String: Any] else {
         // 执行闭包
         isFinish(false,0)
         return
         }
         //resDict["statuses"] 是否为nil(数组)
         guard let res = resDict["statuses"] as? [[String: Any]] else {
         // 执行闭包
         isFinish(false,0)
         return
         }
         // 保存微博数据到本地
         HMHomeDAL.saveCache(res: res)
         //            print(res)
         // OC中获取类型的class -> [Person class]
         // Swift获取类型的class -> Person.self
         // 得到的模型数组
         let statusArray = NSArray.yy_modelArray(with: HMHomeModel.self, json: res)  as! [HMHomeModel]
         // 创建一个临时可以可变的数组-> [HMStatusViewModel]
         var tempArray:[HMStatusViewModel] = [HMStatusViewModel]()
         // 创建调度组
         let group = DispatchGroup()
         
         // 遍历statusArray 创建statuViewModel 然后对齐身上的homeModel进行赋值 然后 保存到临时数组中
         for homeModel in statusArray{
         
         
         // 判断原创微博的pic_urls.count 是否等于1 如果等于1 下载图片
         if homeModel.pic_urls?.count == 1 {
         // 进入
         group.enter()
         // 使用sdwebImage下载
         SDWebImageManager.shared().downloadImage(with: URL(string: homeModel.pic_urls?.first?.thumbnail_pic ?? ""), options: [], progress: nil, completed: { (image, error, _, _, _) in
         print("原创微博单张图片下载完成")
         // 出去
         group.leave()
         })
         }
         
         // 判断转发微博的pic_urls.count 是否等于1 如果等于1 下载图片
         if homeModel.retweeted_status?.pic_urls?.count == 1 {
         // 进入
         group.enter()
         // 使用sdwebImage下载
         SDWebImageManager.shared().downloadImage(with: URL(string: homeModel.retweeted_status?.pic_urls?.first?.thumbnail_pic ?? ""), options: [], progress: nil, completed: { (image, error, _, _, _) in
         print("转发微博单张图片下载完成")
         // 出去
         group.leave()
         })
         }
         let statusViewModel = HMStatusViewModel()
         // 对属性赋值
         statusViewModel.homeModel = homeModel
         // 添加到临时数组中
         tempArray.append(statusViewModel)
         }
         
         /*
         - 微博数据显示的业务逻辑
         -如果是下拉刷新 得到新的数据 放到原有数组的前面
         -如果是上拉加载更过 得到的数据 放到原有数组的后面
         */
         // 赋值
         // 如果是上拉加载更多
         if isPullUp {
         self.dataArray = self.dataArray + tempArray
         }else {
         // 下拉刷新
         self.dataArray = tempArray + self.dataArray
         }
         
         // 监听sdwebimage 是否下载完成
         group.notify(queue: DispatchQueue.main, execute: {
         print("所有微博单张图片下载完成")
         // 执行闭包
         isFinish(true, tempArray.count)
         })
         
         }, failure: {(error)->() in
         print("失败",error)
         // 执行闭包
         isFinish(false,0)
         })

         */
    }
}
